package com.fcscs.cservice.gwt.client;

import java.util.Date;
import java.util.List;

import com.fcscs.core.common.SearchResultsContainer;
import com.fcscs.cservice.domain.ExpressCheckInConfig;
import com.fcscs.cservice.domain.model.CheckInConfiguration;
import com.fcscs.cservice.domain.model.CheckOutConfiguration;
import com.fcscs.cservice.domain.model.FolioView;
import com.fcscs.cservice.domain.model.MessageIdAndStatus;
import com.fcscs.cservice.domain.model.MessageView;
import com.fcscs.cservice.domain.model.RCView;
import com.fcscs.cservice.domain.model.ReservationConf;
import com.fcscs.cservice.domain.model.ReservationView;
import com.google.gwt.user.client.rpc.AsyncCallback;

public interface ReservationServiceAsync {

	void checkOut(long rsvId, FolioView folio, boolean isAuto,
			AsyncCallback<Boolean> callback);

	void expressCheckIn(long rsvId, RCView rc, AsyncCallback<Boolean> callback);

	void findReservations(String term, Long rsvStatusId, Date startTime,
			Date endTime, int start, int resultCnt,
			AsyncCallback<SearchResultsContainer<ReservationView>> callback);

	void findReservations(String firstName, String lastName, Long rsvStatus,
			String roomNo, String memberNo, Long roomStatus, String baggageNo,
			Date arrivDate, Date departDate, Date eta, Date etd, Date date,
			int start, int resultCnt,
			AsyncCallback<SearchResultsContainer<ReservationView>> callback);

	void findRsvForFolio(String firstName, String lastName,
			Long rsvStatusId, String roomNo, Date arrivStart, Date arrivEnd,
			Date departStart, Date departEnd, Date date, int start,
			int resultCnt,
			AsyncCallback<SearchResultsContainer<ReservationView>> callback);

	void getFolioView(long id, AsyncCallback<FolioView> callback);

	void getMessages(long rsvId, AsyncCallback<List<MessageView>> callback);

	void getRCView(long id, AsyncCallback<RCView> callback);

	void getReservationView(long id, AsyncCallback<ReservationView> callback);

	void sendEFolio(long rsvId, long folioId, AsyncCallback<Boolean> callback);

	void updateRC(RCView rc, AsyncCallback<RCView> callback);

	void getRsvConf(long propId,
			AsyncCallback<ReservationConf> callback);

	void saveRsvConf(ReservationConf conf,
			AsyncCallback<ReservationConf> callback);

	void getCheckInConf(long propId,
			AsyncCallback<CheckInConfiguration> callback);

	void getCheckOutConf(long propId,
			AsyncCallback<CheckOutConfiguration> callback);

	void saveCheckOutConf(CheckOutConfiguration conf,
			AsyncCallback<CheckOutConfiguration> callback);

	void updateMessages(List<MessageIdAndStatus> messageList,
			AsyncCallback<List<MessageIdAndStatus>> callback);
}
